package com.banesco.precargadepositos.interfaz.vistas;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

import com.banesco.precargadepositos.interfaz.contratos.IInicio;
import com.banesco.precargadepositos.interfaz.presentadores.PresentadorInicio;
import com.banesco.precargadepositosandroid.R;
import com.testflightapp.lib.TestFlight;

/**
 * Vista que  permite realizar el manejo de los componentes de la ventana de inicio
 * @author Juan Carlos Coello
 * Trascend NC - 09/2013
 */
public class Inicio extends Activity implements IInicio {

	private PresentadorInicio _presentador;

	private Button _bCrearPredeposito;
	private Button _bCrearPrepagoTDC;
	private Button _bConsultarPrecargas;
	private Button _bMenu;



	/**
	 * @return el context de la vista
	 */
	@Override
	public Context getContext() {
		return this;
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_inicio);
		TestFlight.takeOff(this.getApplication(), "d6e34120-dab3-4e2c-9485-56b29d4ff5c5");
		initializeComponents();

		createButtonEvents();
	}

	/**
	 * Metodo que inicializa los componentes de la ventana
	 */
	private void initializeComponents() {
		_presentador = new PresentadorInicio(this);
		_bCrearPredeposito = (Button) findViewById(R.id.inicioBCrearPreDeposito);
		_bCrearPrepagoTDC = (Button) findViewById(R.id.inicioBCrearPrepagoTDC);
		_bConsultarPrecargas = (Button) findViewById(R.id.inicioBConsultarPrecarga);
		_bMenu = (Button) findViewById(R.id.inicioBMenu);
		registerForContextMenu(_bMenu);
		initializeLegalContract();
	}

	/**
	 * Metodo que se encarga de mostrar o no el contrato legal en caso de que haya sido aceptado
	 */
	private void initializeLegalContract() {
		_presentador.crearDataBase();
		if (!_presentador.contratoAceptado())
			createPopUpUserPolicy();
	}

	/**
	 * Metodo que genera los eventos de los botones de la vista
	 */
	private void createButtonEvents() {
		_bMenu.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				openContextMenu(v);				
			}
		});		
		_bCrearPredeposito.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				startActivity(new Intent(Inicio.this, CrearPreDeposito.class));
			}
		});
		_bCrearPrepagoTDC.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				startActivity(new Intent(Inicio.this, CrearPrePagoTDC.class));
			}
		});
		_bConsultarPrecargas.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				startActivity(new Intent(Inicio.this, ConsultarPreCargas.class));
			}
		});
	}

	/**
	 * Metodo que despliega el pop up del contrato legal de la app
	 */
	private void createPopUpUserPolicy() {
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		LayoutInflater inflater = getLayoutInflater();

		builder.setView(inflater.inflate(R.layout.alert_dialog_contrato, null))
		// Add action buttons
		.setPositiveButton(R.string.aceptar, new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int id) {
				_presentador.aceptarContrato();
			}
		})
		.setNegativeButton(R.string.rechazar, new DialogInterface.OnClickListener() {
			public void onClick(DialogInterface dialog, int id) {
				finish();          
				moveTaskToBack(true);
			}
		});      
		builder.create().show();

	}

	/**
	 * Metodo que se encarga del manejo del menu contextual de la ventana
	 */
	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {
		super.onCreateContextMenu(menu, v, menuInfo);
		MenuInflater inflater = getMenuInflater();
		inflater.inflate(R.menu.inicio, menu);
	}

	/**
	 * Metodo que se encarga del manejo de la opcion del menu contextual seleccionada
	 */
	@Override
	public boolean onContextItemSelected(MenuItem item) 
	{
		switch (item.getItemId())
		{
		case R.id.action_salir:
			finish();
			moveTaskToBack(true);
			return true;

		default:
			return super.onContextItemSelected(item);

		}
	}

	/**
	 * Metodo que crea un aviso con un mensaje
	 */
	@Override
	public void createToast(String text)
	{
		Toast.makeText(getContext(), text, Toast.LENGTH_LONG).show();
	}
}
